Events may be encountered in computing environments in a variety of ways. For example, an event may be triggered by a user, such as through a keystroke, by “right clicking” a mouse, and so on. In another example, events may also be triggered by applications, whether executed locally at a client or remotely over a network connection. The events may then be communicated and processed in a variety of ways, such as by being passed from an operating system to an application to cause a file to be opened, saved, and so forth.
In some instances, a variety of different entities may be available at any one time to consume events, by what may be referred to in the following discussion as “event consumers”. For example, a first application may be configured to consume content of a particular type while a second application may be configured to consume content of another type. Therefore, techniques were developed to permit switching between these event consumers when desired, such as when switching between types of content consumption. Traditional techniques that were employed to manage how these events are consumed, however, could be inefficient when switching between consumers, thereby reducing the speed and efficiency of devices that employed these traditional techniques. Additionally, these traditional techniques could even encounter errors due to “dropped” (e.g., missed) events, due to processing of out-of-order events, and so on.